package com.bizfx.utils
{
	import mx.formatters.DateFormatter;

	public class DateUtils
	{
		public function DateUtils()
		{
		}
		
		private static var dateFormatter:DateFormatter = new DateFormatter();
		
		public static function DateToString(date:Date, formatString:String = "YYYY-MM-DD"):String {
			dateFormatter.formatString = formatString;
			return dateFormatter.format(date);
		}
		
		/**
		 * 字符串转成日期，支持格式：
		 * yyyyMMdd
		 * yyyyMMddHH
		 * yyyyMMddHHmm
		 * yyyyMMddHHmmss
		 * yyyy-MM-dd（”-”作判断关键字）
		 * yyyy-MM-dd HH（”-”作判断关键字）
		 * yyyy-MM-dd HH（”-”作判断关键字）
		 * yyyy-MM-dd HH:mm （”-”作判断关键字）
		 * yyyy-MM-dd HH:mm:ss（”-”作判断关键字）
		 * yyyy年MM月dd日（”年”作判断关键字）
		 * yyyy年MM月dd日HH时（”年”作判断关键字）
		 * yyyy年MM月dd日HH时mm分（”年”作判断关键字）
		 * yyyy年MM月dd日HH时mm分ss秒（”年”作判断关键字）
		 * MM/dd/yyyy（例如，”02/01/2005″）
		 * MM/dd/yyyy HH:mm:ss
		 * MM/yyyy dd（例如，”02/2005 23″）
		 * Day Month Date Hours:Minutes:Seconds GMT Year（例如，”Tue Feb 1 00:00:00 GMT-0800 2005″，这与 toString() 一致）
		 * Day Month Date Year Hours:Minutes:Seconds AM/PM（例如，”Tue Feb 1 2005 12:00:00 AM”，这与 toLocaleString() 一致）
		 * Day Month Date Year Hours:Minutes:Seconds（例如，”Tue Feb 1 2005 23:59:59″）
		 * Day Month Date Year（例如，”Tue Feb 1 2005″，这与 toDateString() 一致）
		 */
		public static function StringToDate(value:String):Date
		{
			if (StringUtils.isNullOrEmpty(value))
				return null;
			var year:Number;
			var month:Number;
			var date:Number;
			var h:Number = 0;
			var m:Number = 0;
			var s:Number = 0;
			var ms:Number = 0;
			
			/*
			* yyyyMMdd
			* yyyyMMddHH
			* yyyyMMddHHmm
			* yyyyMMddHHmmss
			*/
			if(!isNaN(Number(value)) && value.length >= 8) {
				year = Number(value.substr(0, 4));
				month = Number(value.substr(4, 2)) -1;
				date = Number(value.substr(6, 2));
				if(value.length>=10)
					h = Number(value.substr(8, 2));
				if(value.length>=12)
					m = Number(value.substr(10, 2));
				if(value.length>=14)
					s = Number(value.substr(12, 2));
				return new Date(year, month, date,h,m,s,ms);
			}
			
			/*
			* yyyy-MM-dd（”-”作判断关键字）
			* yyyy-MM-dd HH（”-”作判断关键字）
			* yyyy-MM-dd HH（”-”作判断关键字）
			* yyyy-MM-dd HH:mm （”-”作判断关键字）
			* yyyy-MM-dd HH:mm:ss（”-”作判断关键字）
			* yyyy年MM月dd日（”年”作判断关键字）
			* yyyy年MM月dd日HH时（”年”作判断关键字）
			* yyyy年MM月dd日HH时mm分（”年”作判断关键字）
			* yyyy年MM月dd日HH时mm分ss秒（”年”作判断关键字）
			*/
			if(value.indexOf("-")>0 || value.indexOf("年")>0)
			{
				var match:Array = value.match( /\d+/g );
				year = Number(match[0]);
				month = Number(match[1]) -1;
				date = Number(match[2]);
				if(match.length>3)
					h = Number(match[3]);
				if(match.length>4)
					m = Number(match[4]);
				if(match.length>5)
					s = Number(match[5]);
				return new Date(year, month, date,h,m,s,ms);
			}
			
			/*	
			* MM/dd/yyyy（例如，”02/01/2005″）
			* MM/dd/yyyy HH:mm:ss
			* MM/yyyy dd（例如，”02/2005 23″）
			* Day Month Date Hours:Minutes:Seconds GMT Year（例如，”Tue Feb 1 00:00:00 GMT-0800 2005″，这与 toString() 一致）
			* Day Month Date Year Hours:Minutes:Seconds AM/PM（例如，”Tue Feb 1 2005 12:00:00 AM”，这与 toLocaleString() 一致）
			* Day Month Date Year Hours:Minutes:Seconds（例如，”Tue Feb 1 2005 23:59:59″）
			* Day Month Date Year（例如，”Tue Feb 1 2005″，这与 toDateString() 一致）
			*/
			return new Date(value);
			
		}
	}
}